/** <!--------------------------------------------------------------------------------------------->
 * @file XXXXXXX.XXX
 *
 * GSvn - A Graphical Client for SVN
 * Copyright (C) 2012  Karl Krach, gsvn@bluespirit.la
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 <!---------------------------------------------------------------------------------------------> */


#ifndef GRAPHREVISION_H
#define GRAPHREVISION_H

// -- includes --
#include "GraphItem.h"

// -- forward declarations --
class GraphBranch;
class QPainter;
class QGraphicsDropShadowEffect;
class QGraphicsSceneContextMenuEvent;
class GeometryChangeListener;







class GraphRevision : public GraphItem
{
	Q_OBJECT


	/* Con-/ Destructors */
public:
	GraphRevision( GraphBranch* pParent, QString strName );
	virtual ~GraphRevision();



	/* Override Methods */
public:

	QVariant itemChange( GraphicsItemChange eChange, const QVariant& oValue );

	void mouseMoveEvent( QGraphicsSceneMouseEvent* event );

	void mouseReleaseEvent( QGraphicsSceneMouseEvent* event );

	void focusInEvent( QFocusEvent* );

	void focusOutEvent( QFocusEvent* );

	void mouseDoubleClickEvent( QGraphicsSceneMouseEvent* );

	void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);

	QRectF boundingRect() const;

	void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);


	/* Public Slots */
private slots:

	void SetOrange();

	void SetBlue();

	/* Private Methods */
private:

	void ApplyOffset( const int iOffset );

	/* Members */
private:

	QString m_strName;
	int m_iOffset;
	bool m_bTinyMode;
	bool m_bHasFocus;
	QColor m_oColor;
	GeometryChangeListener* m_pGeometryChangeListener;

	QMenu* m_pMenu;
	QGraphicsDropShadowEffect* m_pShadowEffect;
	int m_iZValue;

	QPointF m_oMoveStart;

	static const QColor S_BLUE_COLOR;
	static const int S_FULL_WIDTH  = 120;
	static const int S_FULL_HEIGHT =  60;
	static const int S_TINY_WIDTH  =  40;
	static const int S_TINY_HEIGHT =  40;
};

#endif // GRAPHREVISION_H
